package main

import (
	"fmt"
	"reflect"
)

// func 函数名 (参数) 返回值 {函数体}
func postOffiec(email string) bool {
	fmt.Printf("邮件发送-%s\n", email)
	return true
}

// 多参数，多返回值
// 函数在传参的时候， 参数值是 一份复制
func addNum(a int, b int) (int, bool) {
	result := a + b
	var judge bool
	if result < 10 {
		judge = true
	} else {
		judge = false
	}
	return result, judge
}

// 通过指针将数组的值改变
func changeA(arra *[2]int) {
	arra[0] = 666
}

// ---------------------------------------------------------------
// 将函数作为参数
// 定义第一个函数
func function1(arg int) (int, bool) {
	result := arg + 100
	var judge bool
	if result > 200 {
		judge = true
	} else {
		judge = false
	}
	return result, judge
}

// 将第一个函数的参数和返回值的结构定义成一个类型
type f1 func(int) (int, bool)

// 将第一个函数传进第二个函数,用类型的方式传递
func function2(arg1 int, exec f1) int {
	arg1, result := exec(arg1)
	if result {
		return arg1
	} else {
		return 99999
	}
}

func cA() {
	result := function2(818, function1)
	fmt.Println(result)
}

// -----------------------------------------------------------------------------

// 可变参数, 可变长度的类型是切片配型,
// 变长参数只能出现一个， 并且需要放在最后
func muiltNum(num ...int) int {
	sum := 0
	fmt.Println(reflect.TypeOf(num))
	for _, num := range num {
		sum += num
	}
	return sum
}
